package com.example.security.service;

import com.example.security.common.PageResult;
import com.example.security.common.Result;
import com.example.security.dto.UserDTO;
import com.example.security.dto.UserQuery;
import com.example.security.entity.SysUser;
import org.springframework.security.core.userdetails.UserDetailsService;

import java.util.List;
import java.util.Set;

/**
 * 用户服务接口
 */
public interface UserService  {
    
    /**
     * 根据用户名获取用户
     */
    SysUser getByUsername(String username);

    /**
     * 根据用户id获取用户
     */

    SysUser getByUserId(Long userId);
    /**
     * 获取用户权限(通过用户ID)
     */
    Set<String> getUserPermissions(Long userId);
    
    /**
     * 分页查询用户
     */
    PageResult<SysUser> getUserPage(UserQuery query);
    
    /**
     * 创建用户
     */
    void createUser(UserDTO userDTO);
    
    /**
     * 更新用户
     */
    void updateUser(UserDTO userDTO);
    
    /**
     * 删除用户
     */
    void deleteUser(Long userId);
    
    /**
     * 修改密码
     */
    void updatePassword(Long userId, String oldPassword, String newPassword);
    
    /**
     * 重置密码
     */
    void resetPassword(Long userId);
    
    /**
     * 分配用户角色
     */
    void assignUserRoles(Long userId, List<Long> roleIds);
    
    /**
     * 获取用户角色ID列表
     */
    List<Long> getUserRoleIds(Long userId);
    
    /**
     * 检查用户是否是管理员
     */
    boolean isAdmin(SysUser user);

    /**
     * 为用户分配角色
     * @param userId 用户ID
     * @param roleIds 角色ID列表
     */
    void assignRoles(Long userId, List<Long> roleIds);
}
